package com.yangzhe.algorithm.c042;

// 判断一个数字是否是若干数量(数量>1)的连续正整数的和
public class Code03_IsSumOfConsecutiveNumbers {

    /**
     * 暴力方法：
     * 从1开始累加
     * 从2开始累加
     * ....
     *
     * @param num
     * @return
     */
    public static boolean is1(int num) {
        for (int i = 1; i < num; i++) {
            int sum = 0;
            for (int j = i; sum < num; j++) {
                sum += j;
                if (sum == num) {
                    return true;
                }
            }
        }

        return false;
    }

    /**
     * 打表发现只要是 2的x幂，就是F
     *
     * @param num
     * @return
     */
    public static boolean is2(int num) {
        // 判断是否是2的幂
        // 2的幂只有一位是1，例如
        // 2 ^ 3 =     0100
        // 2 ^ 3 - 1 = 0011
        // 两者&等于0则是二的幂
        return !((num & (num - 1)) == 0);
    }

    public static void main(String[] args) {
        for (int num = 1; num < 200; num++) {
            System.out.println(num + " : " + (is1(num) ? "T" : "F"));
            System.out.println(num + " : " + (is2(num) ? "T" : "F"));
        }
    }
}
